package com.redis.service.impl;

import com.redis.entity.TBook;
import com.redis.dao.TBookMapper;
import com.redis.service.ITBookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;


import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author yuyongli
 * @since 2023-07-03
 */
@Service

public class TBookServiceImpl extends ServiceImpl<TBookMapper, TBook> implements ITBookService {


    // tbook::list1
    @Override
    //
    // 数据库中查询数据   ->redis
    // 2. tBook  redis 有 直接从redis取值
    @Cacheable(value = "tbook",sync = true)
    public List<TBook> list1() {
        return this.list();
    }

    @Override
    @Cacheable(value = "tbook" ,key = "#id")
    public TBook getById1(Integer id) {
        return this.getById(id);
    }

    @Override
    // 执行的是修改   1 修改数据录的数据   2 修改之后的数据存放到redis
    // 执行的是添加   1 数据添加到mysql里面  2 添加的数据存放到redis
    @CachePut(value="tbook",key = "#tBook.bookId" )
    // 添加或者修改的时候直接把数据 缓存到redis  查询的时候不经过关系型数据库
    public TBook save1(TBook tBook) {
        // saveOrUpdate tBook没有id的值 执行的是添加    如果有bookId的值  执行的是修改
        this.saveOrUpdate(tBook);
        return tBook;
    }

    @Override
    // allEntries = true 删除tbook的所有的缓存
    @CacheEvict(value = "tbook",allEntries = true)
    //
    public void removeById1(Integer id) {
        this.removeById(id);
    }


}
